home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
listdl.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
9KB
|
224 lines
DEFINITION MODULE ListDl;
FROM SYSTEM IMPORT ADDRESS;
FROM MagicSys IMPORT sBITSET, sINTEGER;
FROM GrafBase IMPORT Rectangle;
IMPORT ListMan;
IMPORT WinDials;
(*$H+*)
TYPE
wdSetProc = WinDials.wdSetProc;
selectEntryProc = ListMan.selectEntryProc;
isSelectedProc = ListMan.isSelectedProc;
(* Wird aufgerufen, um festzustellen, ob ein Eintrag selektiert
* wurde
*)
entryToStringProc = PROCEDURE ( (* entry: *) ADDRESS,
(* env: *) ADDRESS,
VAR (* str: *) ARRAY OF CHAR);
(* Wird aufgerufen, wenn der Autolocator benutzt werden soll *)
entryIsSelectableProc = ListMan.entryIsSelectableProc;
(* Wird aufgerufen, um festzustellen, ob ein Eintrag disabled
* ist oder nicht *)
drawEntryProc = ListMan.drawEntryProc;
(* Wird aufgerufen, um einen Eintrag zu zeichen.
* x und y enthalten die Position, offset ist ein "Offset" vom linken
* Rand aus, cliprect mu bercksichtigt werden!
* Wenn der entry NIL ist, dann mu ein leeres Rechteck gezeichnet
* werden
*)
inLoopProc = PROCEDURE ( (* entry: *) ADDRESS,
(* env: *) ADDRESS);
(* Wird innerhalb der Schleife von DoListDial aufgerufen.
* Erhlt als Parameter den zuletzt angewhlten Eintrag, NIL, falls
* keiner selektiert ist.
*)
lsCheckExitProc = PROCEDURE ( (* tree: *) ADDRESS,
(* env: *) ADDRESS,
(* exitBut: *) INTEGER,
(* lastSel: *) ADDRESS,
(* kstate: *) BITSET): BOOLEAN;
(* Wird aufgerufen, wenn ein ListDialog verlassen werden soll.
* Damit kann man noch Eingaben validieren
*)
specialButProc = PROCEDURE ( (* objc: *) sINTEGER,
(* env: *) ADDRESS,
(* listInfo: *) ADDRESS,
VAR (* redraw: *)BOOLEAN,
VAR (* dialFinish: *) BOOLEAN);
(* Fr zustzliche Buttons, die vom Benutzer definierbar sind *)
specialButHdler = RECORD
objc : sINTEGER;
proc : specialButProc;
END;
(* Listenverwaltung auch ber Prozedurvariablen *)
TYPE ResetProc = ListMan.ResetProc;
(* Setzt Liste zurck auf Anfang *)
MoveProc = ListMan.MoveProc;
(* Liefert nchstes oder vorheriges Element,
* NIL ansonsten
*)
CountProc = ListMan.CountProc;
(* Gibt die Anzahl der Eintrge in der
* Liste zurck *)
TYPE ldHandler = RECORD
list : ADDRESS; (* Zeiger auf die Liste *)
resetList : ResetProc;
nextEntry,
prevEntry : MoveProc;
listElems : CountProc;
isEnabled : entryIsSelectableProc;
selEntry : selectEntryProc;
entryToStr : entryToStringProc;
isSelected : isSelectedProc;
drawEntry : drawEntryProc;
voffset : sINTEGER;
vsize : sINTEGER;
hStep : sINTEGER;
maxWidth : sINTEGER;
END;
(* Fhigkeiten des Listdialoges *)
TYPE ldElems = (ldSelect, ldMultiple, ldArrows, ldDoubleExit, ldAutolocate, ldModal);
ldElemSet = SET OF ldElems;
TYPE DIAL; (* opaquer Typ fr Verwaltung *)
PROCEDURE dummyInLoop (entry, env : ADDRESS);
(* Dummy-Prozedur als InLoopProc *)
PROCEDURE dummyCheckExit (entry, env : ADDRESS; button: INTEGER;
lastSel: ADDRESS; kstate: BITSET): BOOLEAN;
(* Dummy-Prozedur fr Exitcheck, gibt immer TRUE zurck *)
PROCEDURE BuildLdHandler (listStart : ADDRESS; (* Zeiger auf die Liste *)
resetList : ResetProc;
nextEntry,
prevEntry : MoveProc;
listElems : CountProc;
isEnabled : entryIsSelectableProc;
selEntry : selectEntryProc;
entryToStr : entryToStringProc;
isSelected : isSelectedProc;
drawEntry : drawEntryProc;
voffset : sINTEGER;
vsize : sINTEGER;
hStep : sINTEGER;
maxWidth : sINTEGER;
VAR handler: ldHandler);
(* Baut aus den bergebenen Daten einen ldHandler zusammen
*)
PROCEDURE PrepareListDial (tree : ADDRESS;
elems : ldElemSet;
VAR handler : ldHandler;
boxIndex,
boxBack : sINTEGER;
okBut,
cancelBut : sINTEGER;
env : ADDRESS;
doubleClickButton : sINTEGER;
VAR d : DIAL) : BOOLEAN;
(* Bereitet einen Dialog fr eine Listenbehandlung vor. Der Dialog mu
* schon initialisiert sein.
*)
PROCEDURE ReleaseListDial (VAR d : DIAL) : BOOLEAN;
(* gibt einen Listenhandler wieder frei *)
PROCEDURE FindDial (tree : ADDRESS; button : sINTEGER; treeOnly : BOOLEAN) : DIAL;
(* Gibt den zu dem Button gehrenden DIAL zurck,
* ansonsten NIL
*)
PROCEDURE NilDIAL () : DIAL;
(* Gibt einen Nil-Dial zurck fr Vergleiche *)
PROCEDURE HandleListDial (d : DIAL;
VAR but : sINTEGER; (* Der von DialDo gelieferte Button *)
mx, my : sINTEGER; (* Die Mauskoordinaten *)
kstate : BITSET; (* Der Tastaturstatus *)
VAR lastElem : ADDRESS) : BOOLEAN;
(* Verwaltet die Events, wenn etwas in diesem Dial angeklickt wurde
* Rckgabe: TRUE = Exit-Button angewhlt
*)
PROCEDURE DrawListDial (d: DIAL; clip: Rectangle);
(* Zeichnet die Liste komplett inklusive aller Elemente *)
PROCEDURE InitAutoLocator (dial: DIAL);
(* Setzt den Default-Dial fr den Autolocator, nur ntig, wenn man
* nicht doListDial benutzt
*)
PROCEDURE FreeAutoLocator ();
(* Entfernt den Default-Dial fr den Autolocator, nur ntig, wenn man
* nicht doListDial benutzt
*)
PROCEDURE AutoLocate (tree : ADDRESS; mx, my : sINTEGER; scan : sINTEGER;
kstate : sBITSET; event : sBITSET; edObj : sINTEGER): sBITSET;
(* Der Autolocator zum manuellen Aufruf, falls man nicht ber
* doListDial geht
*)
PROCEDURE doListDial (tree : ADDRESS;
elems : ldElemSet;
VAR handler : ldHandler;
boxIndex, boxBack,
okBut, cancelBut : sINTEGER;
env : ADDRESS;
doubleClickButton : sINTEGER;
autoEdit : INTEGER;
inLoop : inLoopProc;
specials : ARRAY OF specialButHdler;
setValues : wdSetProc;
getValues : wdSetProc;
VAR lastElem : ADDRESS) : sINTEGER;
(* Handelt eine komplette Scrollbare Liste.
* Gibt den Index des Exit-Buttons zurck.
* In lastElem wird die Adresse des zuletzt selektierten Elements zurckgegeben.
* Bei multiple = TRUE knnen mehrere Eintrge selektiert werden.
*)
PROCEDURE WinListDial (tree : ADDRESS;
elems : ldElemSet;
VAR handler : ldHandler;
boxIndex, boxBack,
okBut, cancelBut : sINTEGER;
env : ADDRESS;
doubleClickButton : sINTEGER;
autoEdit : INTEGER;
inLoop : inLoopProc;
VAR specials: ARRAY OF specialButHdler;
specialCount: INTEGER;
checkExit : lsCheckExitProc;
setValues : wdSetProc;
getValues : wdSetProc;
VAR lastElem : ADDRESS) : BOOLEAN;
(* ffnet einen Dialog mit einer scrollbaren Liste als Fensterdialog
*)
END ListDl.